package com.micro.modual.controller;

import com.micro.core.resp.RespJson;
import com.micro.core.resp.RespJsonData;
import com.micro.core.resp.RespJsonPageData;
import com.micro.modual.model.bo.systemuser.BindRoleBO;
import com.micro.modual.model.bo.systemuser.ModifyUserStatusBO;
import com.micro.modual.model.bo.systemuser.SystemUserBO;
import com.micro.modual.model.dto.systemuser.SystemUserDetailDTO;
import com.micro.modual.model.dto.systemuser.SystemUserListDTO;
import com.micro.modual.model.dto.systemuserrole.UserRoleDTO;
import com.micro.modual.service.SystemUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.*;

import java.util.Map;

/**
 * <h1>系统用户表 控制器</h1>
 * @author levelcoder
 * @version V1.0.0
 * @email LevelCoder@126.com
 * @date 2020-08-04 00:27:46
 */
@Api(value = "地址管理",tags = "地址管理")
@RestController
@RequestMapping(value = "systemUser")
public class SystemUserController {

    @Autowired
    private SystemUserService systemUserService;

    /**
     * <h2>查找系统用户表 列表</h2>
     * @param params 列表查询请求对象
     * @return List<SystemUserListDTO> {@link SystemUserListDTO}s  系统用户表 列表返回对象
     */
    @ApiOperation(value = "查询系统用户表列表" ,notes = "查询系统用户表列表")
    @GetMapping(value = "/findSystemUserList")
    public RespJsonPageData<SystemUserListDTO> findSystemUserList(@RequestParam  Map<String,Object> params){
        return systemUserService.findList(params,SystemUserListDTO.class);
    }

    /**
     * <h2>根据主键编号查看系统用户表详情</h2>
     * @param id  系统用户表 主键编号
     * @return {@link SystemUserDetailDTO}  系统用户表 详情
     */
    @ApiOperation(value = "查询系统用户表详情",notes = "根据主键编号，查询系统用户表详情")
    @GetMapping(value = "/findSystemUserDetail/{id}")
    public RespJsonData<SystemUserDetailDTO> findSystemUserDetail(@PathVariable("id") Long id){
        return systemUserService.findDetail(id,SystemUserDetailDTO.class);
    }

    /**
     * <h2>新增系统用户表详情</h2>
     * @param systemUserBO {@link SystemUserBO} 系统用户表 新增/修改 请求对象
     * @return {@link RespJson} 返回结果基础类
     */
    @ApiOperation(value = "新增系统用户表",notes = "新增系统用户表")
    @PostMapping(value = "/addSystemUser")
    public RespJson addSystemUser(@RequestBody SystemUserBO systemUserBO){
        return systemUserService.addSystemUser(systemUserBO);
    }

    /**
     * <h2>根据主键编号删除系统用户表信息</h2>
     * @param id  系统用户表 主键编号
     * @return  {@link RespJson} 返回结果基础类
     */
    @ApiOperation(value = "删除系统用户表",notes = "根据地址ID，删除系统用户表")
    @PostMapping(value = "/deleteSystemUser/{id}")
    public RespJson deleteSystemUser(@PathVariable("id") Long id){
        return systemUserService.deleteSystemUser(id);
    }

    /**
     * <h2>修改用户状态{包含批量}</h2>
     * @param modifyUserStatusBO  {@link ModifyUserStatusBO} 修改用户状态请求对象
     * @return {@link RespJson} 返回结果基础类
     */
    @ApiOperation(value = "修改用户状态",notes = "修改用户状态")
    @PostMapping(value = "/modifyUserStatus")
    public RespJson modifyUserStatus(@RequestBody ModifyUserStatusBO modifyUserStatusBO){
        return systemUserService.modifyUserStatus(modifyUserStatusBO);
    }

    /**
     * <h2>校验邮箱</h2>
     * @param email 邮箱
     * @return {@link RespJson} 返回结果基础类
     */
    @ApiOperation(value = "校验邮箱",notes = "校验邮箱")
    @PostMapping(value = "/validateEmailExist/{email}")
    public RespJson validateEmailExist(@PathVariable("email") String email){
        return systemUserService.validateEmailExist(email);
    }

    /**
     * <h2>校验手机号是否存在</h2>
     * @param phone 手机号
     * @return {@link RespJson} 返回结果基础类
     */
    @ApiOperation(value = "校验手机号",notes = "校验手机号")
    @PostMapping(value = "/validataPhoneExist/{phone}")
    public RespJson validataPhoneExist(@PathVariable("phone") String phone){
        return systemUserService.validataPhoneExist(phone);
    }

    /**
     * <h2>校验用户名是否存在</h2>
     * @param loginName   用户名/登录名
     * @return {@link RespJson} 返回对象
     */
    @ApiOperation(value = "校验用户名",notes = "校验用户名")
    @PostMapping(value = "/validataLoginName/{loginName}")
    public RespJson validataLoginName(@PathVariable("loginName") String loginName){
        return systemUserService.validataLoginName(loginName);
    }

    /**
     * <h2>用户角色相关:用户角色查看</h2>
     * @return {@link UserRoleDTO} 用户角色关联表
     */
    @ApiOperation(value = "用户角色查看",notes = "用户角色查看")
    @GetMapping(value = "/findUserRole/{userId}")
    public RespJsonData<UserRoleDTO> findUserRole(@PathVariable("userId") Long userId){
        return systemUserService.findUserRole(userId);
    }


    /**
     * <h2>用户绑定角色</h2>
     * @param bindRoleBO {@link BindRoleBO}  用户绑定角色请求对象
     * @return {@link RespJson} 返回结果基础类
     */
    @ApiOperation(value = "用户绑定角色",notes = "用户绑定角色")
    @PostMapping(value = "/bindRole")
    public RespJson bindRole(@RequestBody BindRoleBO bindRoleBO){
        return systemUserService.bindRole(bindRoleBO);
    }

}

